home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 441 / dlibs12 / getenv.c < prev    next >
C/C++ Source or Header  |  1990-11-23  |  1KB  |  56 lines

  1. #include <stdio.h>
  2.  
  3. extern char    *_envp;
  4.  
  5. static char *findenv(var)
  6.     register char *var;
  7. /*
  8.  *    INTERNAL FUNCTION.  This functions attempts to locate <var> in
  9.  *    the environment.  If <var> is not found, NULL is returned.  If
  10.  *    the environment is NULL, NULL is returned.  If <var> is found,
  11.  *    a pointer to the beginning of <var> in the environment is returned.
  12.  *    BOTH MS-DOS AND TOS ENVIRONMENT FORMATS ARE ACCOMODATED.
  13.  */
  14.     {
  15.     register char *p;
  16.     register int len;
  17.  
  18.     if((p = _envp) == NULL)
  19.         return(NULL);
  20.     len = strlen(var);
  21.     while(*p)
  22.         {
  23.         if((p[len] == '=') && !strncmp(p, var, len))
  24.             return(p);
  25.         while(*p++)        /* move to next arg */
  26.             ;
  27.         }
  28.     return(NULL);
  29.     }
  30.  
  31. char *getenv(var)
  32.     register char *var;
  33.     {
  34.     register char *p, *q;
  35.     register int len;
  36.  
  37.     len = strlen(var);
  38.     if(p = findenv(var))
  39.         {
  40.         p += (len + 1);
  41.         if(*p == '\0')        /* TOS env format or empty value */
  42.             {
  43.             q = p+1;
  44.             if(*q == '\0')        /* empty value + end of env */
  45.                 return(p);
  46.             while(*q && (*q != '='))
  47.                 ++q;
  48.             if(*q)            /* empty value */
  49.                 return(p);
  50.             else            /* TOS env format */
  51.                 return(p+1);
  52.             }
  53.         }
  54.     return(p);
  55.     }
  56.